package com.example.demo;

import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.filefilter.FileFilterUtils;
import org.apache.commons.io.filefilter.HiddenFileFilter;
import org.apache.commons.io.filefilter.IOFileFilter;
import org.apache.commons.io.monitor.FileAlterationMonitor;
import org.apache.commons.io.monitor.FileAlterationObserver;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;

import java.io.File;
import java.util.concurrent.TimeUnit;

@Configuration
@Slf4j
public class FilterFileConfig {

    @Autowired
    private FileListener fileListener;

    public void FileFilter(String rootDir){
        // 轮询间隔 1 秒
        long interval = TimeUnit.SECONDS.toMillis(1);
        System.out.println(interval);
        // 创建过滤器
        IOFileFilter directories = FileFilterUtils.and(
                //只监听文件夹，目录
                FileFilterUtils.directoryFileFilter(),
                //此过滤器接受隐藏的file
                HiddenFileFilter.VISIBLE);
        IOFileFilter files = FileFilterUtils.and(
                //此过滤器只监听文件
                FileFilterUtils.fileFileFilter(),
//                FileFilterUtils.nameFileFilter("c_11_tsm_cty"));
//                FileFilterUtils.suffixFileFilter("p.txt"));
//                FileFilterUtils.or(FileFilterUtils.nameFileFilter("progress.txt"),
                FileFilterUtils.suffixFileFilter(".zip"));
        IOFileFilter filter = FileFilterUtils.or(directories, files);

//        只监听txt
//        IOFileFilter filter = FileFilterUtils.and(
//                FileFilterUtils.fileFileFilter(),
//                FileFilterUtils.suffixFileFilter(".txt"));
//
//        IOFileFilter filter =  FileFilterUtils.suffixFileFilter(".txt");

        // 观察类，观察指定路径的文件
        FileAlterationObserver observer = new FileAlterationObserver(new File(rootDir), filter);
        //filelistener，提供监听时的事件处理
        observer.addListener(fileListener);
        //创建文件变化监听器（默认为1000毫秒执行一次扫描）,监控类
        FileAlterationMonitor monitor = new FileAlterationMonitor(interval, observer);
        // 开始监控
        try{
            monitor.start();
            System.out.println("jk开始监听--------");
            System.out.println(System.getProperty("file.encoding"));
        }
        catch (Exception e){
            log.error("异常处理",e);
        }
    }
}
